/**
 * 输入净化中间件
 * 提供HTML转义、SQL注入防护和XSS过滤功能
 * @module middleware/sanitizationMiddleware
 */
import {body, param, query} from 'express-validator';


/**
 * 创建通用输入净化中间件
 * @param {Array} sanitizationRules - express-validator净化规则数组
 * @returns {Function} Express中间件函数
 */
export const sanitizeRequest = (sanitizationRules) => {
    return async (req, res, next) => {
        // 执行所有净化规则
        await Promise.all(sanitizationRules.map(rule => rule.run(req)));
        next();
    };
};

/**
 * 用户输入通用净化规则
 * 包含常见字段的HTML转义和XSS防护
 */
export const userInputSanitizer = sanitizeRequest([
    // 字符串字段净化
    body('username').trim().escape(),
    body('email').trim().normalizeEmail(),
    body('password').trim(),
    body('bio').trim().escape(),
    body('comment').trim().escape(),

    // URL字段净化
    body('website').trim().isURL().withMessage('无效的URL格式').escape(),

    // 参数净化
    param('id').trim().escape(),
    query('search').trim().escape()
]);

/**
 * 高级XSS防护净化规则
 * 针对富文本等特殊场景的净化
 */
export const advancedXssSanitizer = sanitizeRequest([
    // 允许部分安全HTML标签的富文本净化
    body('content').trim().escape().stripLow().replace(/<script.*?>.*?<\/script>/gi, ''),
    body('description').trim().escape().stripLow()
]);